""" 从头文件中获取类名，成员变量以及成员变量的类型，成员函数以及成员函数的参数和返回值 """

import re
import os
import sys

def get_class_name(content):
    """ 获取类名 """
    class_name = re.findall(r"class\s+(\w+)\s*:", content)
    return class_name

def get_private_members(content):
    """ 获取私有成员变量 """
    private_members = re.findall(r"private:\s*(\w+\s+\w+;)", content)
    return private_members

def get_public_methods(content):
    """ 获取共有成员函数 """
    public_methods = re.findall(r"public:\s*(\w+\s+\w+\(.*\);)", content)
    return public_methods

def get_members_type(content):
    """ 获取成员变量的类型 """
    members_type = re.findall(r"(\w+)\s+\w+;", content)
    return members_type

def get_methods_params(content):
    """ 获取成员函数的参数 """
    methods_params = re.findall(r"\w+\s+\w+\((.*)\);", content)
    return methods_params

def get_methods_return(content):
    """ 获取成员函数的返回值 """
    methods_return = re.findall(r"\w+\s+(\w+)\s*\(", content)
    return methods_return

def get_methods_params_type(content):
    """ 获取成员函数的参数类型 """
    methods_params_type = re.findall(r"(\w+)\s+\w+", content)
    return methods_params_type

def get_methods_params_name(content):
    """ 获取成员函数的参数名 """
    methods_params_name = re.findall(r"\w+\s+(\w+)", content)
    return methods_params_name

def get_methods_return_type(content):
    """ 获取成员函数的返回值类型 """
    methods_return_type = re.findall(r"(\w+)\s+\w+\s*\(", content)
    return methods_return_type

if __name__ == '__main__':
    # 获取当前目录
    current_dir = os.getcwd()
    # 获取当前目录下的所有文件
    files = os.listdir(current_dir)
    # 遍历所有文件
    for file in files:
        # 获取文件名
        file_name = os.path.splitext(file)[0]
        # 获取文件后缀
        file_suffix = os.path.splitext(file)[1]
        # 判断文件后缀是否为.h
        if file_suffix == '.h':
            # 打开头文件
            with open(file, 'r') as f:
                # 读取头文件内容
                content = f.read()
                # 获取类名
                class_name = get_class_name(content)
                # 获取私有成员变量
                private_members = get_private_members(content)
                # 获取共有成员函数
                public_methods = get_public_methods(content)
                # 获取成员变量的类型
                members_type = get_members_type(content)
                # 获取成员函数的参数
                methods_params = get_methods_params(content)
                # 获取成员函数的返回值
                methods_return = get_methods_return(content)
                # 获取成员函数的参数类型
                methods_params_type = get_methods_params_type(content)
                # 获取成员函数的参数名
                methods_params_name = get_methods_params_name(content)
                # 获取成员函数的返回值类型
                methods_return_type = get_methods_return_type(content)
                # 打印类名
                print("class name: ", class_name)
                # 打印私有成员变量
                print("private members: ", private_members)
                # 打印共有成员函数
                print("public methods: ", public_methods)
                # 打印成员变量的类型
                print("members type: ", members_type)
                # 打印成员函数的参数
                print("methods params: ", methods_params)
                # 打印成员函数的返回值
                print("methods return: ", methods_return)
                # 打印成员函数的参数类型
                print("methods params type: ", methods_params_type)
                # 打印成员函数的参数名
                print("methods params name: ", methods_params_name)
                # 打印成员函数的返回值类型
                print("methods return type: ", methods_return_type)